Muito interessante mano, isso melhora bastante a qualidade do servidor!
- Fórum
- OTServ
- Tutoriais
- Tutoriais de Clients
- [OTClient] Sistema de Dialogo Otpokemon
[OTClient] Sistema de Dialogo Otpokemon
Por Gengo, 29 de ago. de 2020 em Tutoriais de Clients
info
Grupo: Infante
Registrado: 06/03/13
Posts: 1.6k
Reputação: +319
Gênero: Masculino
Char no Tibia: Lord Sorte

info
Grupo: Herói
Registrado: 12/06/12
Posts: 2.2k
Reputação: +739
Gênero: Masculino
Char no Tibia: Supreme Player

Muito bom meu parceiro o/
info
Grupo: Campones
Registrado: 09/05/20
Posts: 1
Reputação: 0

Maluco, tu é 1 deus!! Isso vai ajudar muitos projetos em OTC!!
info
Grupo: Campones
Registrado: 23/08/12
Posts: 41
Reputação: +2

por curiosidade se eu adicionar isso os outros npc existente fica com essa funçao ou precisa de algo a +
function greetCallback(cid) doSendDialogNpc(cid, getNpcId(), "Olá jovem, vejo que você conseguiu chegar até aqui!\nClique em Recompensa e fique feliz pela conquista!", "Fechar&Recompensa") return true end
info
Grupo: Cavaleiro
Registrado: 10/03/13
Posts: 177
Reputação: +202
Gênero: Masculino
Char no Tibia: stor akia

14 minutos atrás, anderson127 disse:por curiosidade se eu adicionar isso os outros npc existente fica com essa funçao ou precisa de algo a +
function greetCallback(cid) doSendDialogNpc(cid, getNpcId(), "Olá jovem, vejo que você conseguiu chegar até aqui!\nClique em Recompensa e fique feliz pela conquista!", "Fechar&Recompensa") return true end
greetCallback, que é quando inicia a fala com o npc, logo se você deseja que o seu npc comece dialogando e mostra o modulo de dialogo, você precisa adicionar o trecho de codigo a seguir, lembrando que é para cada npc que você deseje que o modulo de dialogo funcione.
function greetCallback(cid) -- Aqui vai a função do dialogo do npc return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback)
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

Parabéns pelo conteúdo! Vai ser muito útil para vários servidores.
Fico feliz que em pleno 2020 ainda há membros como você que trazem conteúdos e recursos novos para a comunidade do Xtibia, pois, muitas pessoas não ajudam em nada e não trazem conteúdos/recursos algum para o fórum, mas, para vir pegar conteúdos novos, aparecem rapidinho! Sendo que muitos desses, tem capacidade para contribuir.
Enfim, fico feliz que ainda contribuam para a comunidade.
info
Grupo: Campones
Registrado: 24/11/09
Posts: 57
Reputação: +10
Gênero: Masculino
Char no Tibia: [ADM] Luan

Não sei se é só comigo, mas se eu usar o módulo para mais conversas no mesmo npc, quando eu clico na opção final a janela não 'some' '-'
info
Grupo: Cavaleiro
Registrado: 10/03/13
Posts: 177
Reputação: +202
Gênero: Masculino
Char no Tibia: stor akia

Agora, luangop disse:Não sei se é só comigo, mas se eu usar o módulo para mais conversas no mesmo npc, quando eu clico na opção final a janela não 'some' '-'
Entre em contato comigo pelo discord Gengo#8230 ficará mas fácil eu tentar ajudar você do que eu ficar perguntando cada coisa até chegar no problema, assim não fica poluindo muito o tópico com mensagens.
info
Grupo: Campones
Registrado: 24/11/09
Posts: 57
Reputação: +10
Gênero: Masculino
Char no Tibia: [ADM] Luan

10 minutos atrás, Gengo disse:Entre em contato comigo pelo discord Gengo#8230 ficará mas fácil eu tentar ajudar você do que eu ficar perguntando cada coisa até chegar no problema, assim não fica poluindo muito o tópico com mensagens.
#Resolvido! Foi erro meu, não utilizei o npc disponibilizado e deixei passar em branco a função doSendDialogNpcClose(cid)
Vlw @Gengo
info
Grupo: Campones
Registrado: 23/08/12
Posts: 41
Reputação: +2

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) end
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function getPlayerAllTowerItens(cid)
if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then
return true
end
return false
end
function doRemoveItensTower(cid)
doPlayerRemoveItem(cid, 12163, 1000)
doPlayerRemoveItem(cid, 12161, 1000)
doPlayerRemoveItem(cid, 19500, 1500)
doPlayerRemoveItem(cid, 19501, 2000)
doPlayerRemoveItem(cid, 19540, 200)
doPlayerRemoveItem(cid, 15092, 100)
doPlayerRemoveItem(cid, 15098, 100)
doPlayerRemoveItem(cid, 15094, 100)
doPlayerRemoveItem(cid, 19536, 50)
return true
end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then
if getPlayerStorageValue(cid, 509001) >= 1 then
selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!")
return true
end
if getPlayerStorageValue(cid, 659875) == -1 then
selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid)
talkState[cid] = 1
else
selfSay("Você já fez seus pedidos?", cid)
talkState[cid] = 2
end
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then
if getPlayerAllTowerItens(cid) then
doRemoveItensTower(cid)
selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid)
setPlayerStorageValue(cid, 659875, 1)
else
selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid)
talkState[cid] = 0
return true
end
elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then
selfSay("Você já fez seus pedidos?", cid)
talkState[cid] = 2
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then
if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then
setPlayerStorageValue(cid, 509001, 1)
setPlayerStorageValue(cid, 78501, 1)
selfSay("Pronto agora você pode acessar a tower!", cid)
talkState[talkUser] = 0
else
selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid)
talkState[talkUser] = 0
end
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then
selfSay("So good bye...", cid)
talkState[cid] = 0
return false
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
tipo ai eu tenho que adicionar apenas essa funçao que vc falou ou refazer todos os npc mesmo?
6 minutos atrás, anderson127 disse:local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) end function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function getPlayerAllTowerItens(cid) if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then return true end return false end function doRemoveItensTower(cid) doPlayerRemoveItem(cid, 12163, 1000) doPlayerRemoveItem(cid, 12161, 1000) doPlayerRemoveItem(cid, 19500, 1500) doPlayerRemoveItem(cid, 19501, 2000) doPlayerRemoveItem(cid, 19540, 200) doPlayerRemoveItem(cid, 15092, 100) doPlayerRemoveItem(cid, 15098, 100) doPlayerRemoveItem(cid, 15094, 100) doPlayerRemoveItem(cid, 19536, 50) return true end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then if getPlayerStorageValue(cid, 509001) >= 1 then selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!") return true end if getPlayerStorageValue(cid, 659875) == -1 then selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid) talkState[cid] = 1 else selfSay("Você já fez seus pedidos?", cid) talkState[cid] = 2 end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then if getPlayerAllTowerItens(cid) then doRemoveItensTower(cid) selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid) setPlayerStorageValue(cid, 659875, 1) else selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid) talkState[cid] = 0 return true end elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then selfSay("Você já fez seus pedidos?", cid) talkState[cid] = 2 elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then setPlayerStorageValue(cid, 509001, 1) setPlayerStorageValue(cid, 78501, 1) selfSay("Pronto agora você pode acessar a tower!", cid) talkState[talkUser] = 0 else selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid) talkState[talkUser] = 0 end elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then selfSay("So good bye...", cid) talkState[cid] = 0 return false end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())tipo ai eu tenho que adicionar apenas essa funçao que vc falou ou refazer todos os npc mesmo?
Ele respondeu: é para cada npc que você deseje que o modulo de dialogo funcione.
info
Grupo: Campones
Registrado: 23/08/12
Posts: 41
Reputação: +2

acontece que eu coloquei e nao foi o npchandler no final
function greetCallback(cid) -- Aqui vai a função do dialogo do npc return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback)
1 minuto atrás, anderson127 disse:acontece que eu coloquei e nao foi o npchandler no final
function greetCallback(cid) -- Aqui vai a função do dialogo do npc return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback)
Manda pm para mim que eu vou ajudar você.
info
Grupo: Campones
Registrado: 23/08/12
Posts: 41
Reputação: +2

e aquele npc ali em cima
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) end
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function getPlayerAllTowerItens(cid)
if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then
return true
end
return false
end
function doRemoveItensTower(cid)
doPlayerRemoveItem(cid, 12163, 1000)
doPlayerRemoveItem(cid, 12161, 1000)
doPlayerRemoveItem(cid, 19500, 1500)
doPlayerRemoveItem(cid, 19501, 2000)
doPlayerRemoveItem(cid, 19540, 200)
doPlayerRemoveItem(cid, 15092, 100)
doPlayerRemoveItem(cid, 15098, 100)
doPlayerRemoveItem(cid, 15094, 100)
doPlayerRemoveItem(cid, 19536, 50)
return true
end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then
if getPlayerStorageValue(cid, 509001) >= 1 then
selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!")
return true
end
if getPlayerStorageValue(cid, 659875) == -1 then
selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid)
talkState[cid] = 1
else
selfSay("Você já fez seus pedidos?", cid)
talkState[cid] = 2
end
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then
if getPlayerAllTowerItens(cid) then
doRemoveItensTower(cid)
selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid)
setPlayerStorageValue(cid, 659875, 1)
else
selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid)
talkState[cid] = 0
return true
end
elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then
selfSay("Você já fez seus pedidos?", cid)
talkState[cid] = 2
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then
if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then
setPlayerStorageValue(cid, 509001, 1)
setPlayerStorageValue(cid, 78501, 1)
selfSay("Pronto agora você pode acessar a tower!", cid)
talkState[talkUser] = 0
else
selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid)
talkState[talkUser] = 0
end
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then
selfSay("So good bye...", cid)
talkState[cid] = 0
return false
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())





info
Grupo: Cavaleiro
Registrado: 10/03/13
Posts: 177
Reputação: +202
Gênero: Masculino
Char no Tibia: stor akia
[OTClient] Sistema de Dialogo Otpokemon
Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,
não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.
1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client, extraia e coloque o modulo na pasta modules.
2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:
Feito o passo 1 e 2, vamos para a parte do servidor.
1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:
2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:
Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.
1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:
2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:
O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.
Demostrativo dentro do game:
Arquivos para download e o scan:
Module: https://mega.nz/file/xLwExQRC#cgaGcDtfOVY65tL_BQVjd3NWPH1eFaP9C1W8Ko3oCMU
Scan: https://www.virustotal.com/gui/file/d245ba17751202d21c21d92564b4927c67a0bb0aa10fa7b84f41174cb8d7b863?nocache=1
Editado Abril 23 por Yan Liima